home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / fix_disk.zip / DISKINFO.ASM < prev    next >
Assembly Source File  |  1987-01-01  |  11KB  |  273 lines

  1. PAGE ,132
  2. TITLE Disk Information Program, Version 2.01 01-Jan-1987
  3.  
  4. ;
  5. ; Written By Steven Georgiades
  6. ;
  7. ;       If you are using this program and find it of value, your
  8. ;       contribution in any amount ($5.00 suggested) will be greatly
  9. ;       appreciated.  Makes checks payable to Steven M. Georgiades.
  10. ;               Thank you.
  11. ;
  12. ;       If you have any questions or comments about this or any other
  13. ;       SMG program, write to me at the following address:
  14. ;
  15. ;               Steven M. Georgiades
  16. ;               701-H South Hayward Street
  17. ;               Anaheim, CA 92804
  18. ;
  19.  
  20. CODE      SEGMENT BYTE 'CODE'
  21.  
  22.           ASSUME  CS:CODE,DS:CODE,ES:CODE
  23.  
  24.           ORG     5CH
  25. FCB       LABEL   BYTE
  26.  
  27.           ORG     100H
  28.  
  29. START:    JMP     DISKINFO
  30.  
  31. DATASEC   DW      ?
  32.  
  33. SIGNON    DB      "Disk Information Program, Version 2.01",13,10
  34.           DB      "SMG Software",13,10
  35.           DB      "(C) Copyright 1987 Steven M. Georgiades",13,10,10,"$"
  36.  
  37. DISKINFO: PUSH    AX                            ; Save Parameter Indicator
  38.           MOV     AH,9                          ; Output Sign-On Message
  39.           MOV     DX,OFFSET SIGNON
  40.           INT     21H
  41.           POP     AX                            ; Restore Parameter Indicator
  42.           CMP     AL,0                          ; If Invalid Parameter, Error
  43.           JE      DRVOK
  44.           MOV     AH,9                          ; Output INVALID DRIVE Message
  45.           MOV     DX,OFFSET ERRMSG
  46.           INT     21H
  47.           MOV     AX,4C01H                      ; Exit
  48.           INT     21H
  49. DRVOK:    MOV     AL,FCB                        ; Get Drive Number
  50.           DEC     AL
  51.           CMP     AL,0                          ; If Default,
  52.           JGE     SAVEDRV
  53.           MOV     AH,19H                        ;   Determine Default Drive
  54.           INT     21H
  55. SAVEDRV:  MOV     DL,AL                         ; Indicate Drive Letter
  56.           ADD     DL,'A'
  57.           MOV     INFO01[22],DL
  58.           MOV     CX,1                          ; Read Boot Record of Drive
  59.           XOR     DX,DX
  60.           MOV     BX,OFFSET BOOTREC
  61.           INT     25H
  62.           POPF
  63.           MOV     SI,OFFSET OEMSTR              ; Copy OEM Name & Version
  64.           MOV     DI,OFFSET INFO[22]
  65.           MOV     CX,8
  66.           REP     MOVSB
  67.           MOV     AX,SECSIZE                    ; Convert Bytes/Sector
  68.           MOV     DI,OFFSET INFO02[9]
  69.           CALL    DEC4OUT
  70.           CALL    STRIP0
  71.           MOV     AL,CLSTSEC                    ; Convert Sectors/Cluster
  72.           XOR     AH,AH
  73.           MOV     DI,OFFSET INFO03[9]
  74.           CALL    DEC4OUT
  75.           CALL    STRIP0
  76.           MOV     BX,SECSIZE                    ; Convert Bytes/Cluster
  77.           MUL     BX
  78.           MOV     DI,OFFSET INFO03[31]
  79.           CALL    DEC4OUT
  80.           CALL    STRIP0
  81.           MOV     AX,TRKSEC                     ; Convert Sectors/Track
  82.           MOV     DI,OFFSET INFO04[9]
  83.           CALL    DEC4OUT
  84.           CALL    STRIP0
  85.           MOV     AX,HEADCNT                    ; Convert Number of Heads
  86.           MOV     DI,OFFSET INFO05[9]
  87.           CALL    DEC4OUT
  88.           CALL    STRIP0
  89.           MOV     AX,TOTSEC                     ; Convert Total Sectors
  90.           MOV     DI,OFFSET INFO06[31]
  91.           CALL    DEC5OUT
  92.           CALL    STRIP0
  93.           MOV     DX,AX                         ; Calculate Total Data Sectors
  94.           MOV     AX,RESVSEC                    ; Convert Reserved Sectors
  95.           MOV     DI,OFFSET INFO07[31]
  96.           CALL    DEC5OUT
  97.           CALL    STRIP0
  98.           SUB     DX,AX
  99.           MOV     AX,FATSEC                     ; (Calculate Total FAT Sectors)
  100.           MOV     BL,FATCNT
  101.           XOR     BH,BH
  102.           PUSH    DX
  103.           MUL     BX
  104.           POP     DX
  105.           MOV     DI,OFFSET INFO08[31]          ; Convert Total FAT Sectors
  106.           CALL    DEC5OUT
  107.           CALL    STRIP0
  108.           SUB     DX,AX
  109.           MOV     AX,DIRCNT                     ; (Calculate DIR Sectors)
  110.           MOV     CL,5
  111.           SHL     AX,CL
  112.           MOV     BX,SECSIZE
  113.           PUSH    DX
  114.           XOR     DX,DX
  115.           DIV     BX
  116.           OR      DX,DX
  117.           JZ      NOROUND
  118.           INC     AX
  119. NOROUND:  POP     DX
  120.           MOV     DI,OFFSET INFO09[31]          ; Convert DIR Sectors
  121.           CALL    DEC5OUT
  122.           CALL    STRIP0
  123.           MOV     DI,OFFSET INFO15[40]          ; Convert DIR Sectors Again
  124.           CALL    DEC2OUT
  125.           CALL    STRIP0
  126.           SUB     DX,AX
  127.           MOV     DATASEC,DX
  128.           MOV     AX,DX                         ; Convert Total Data Sectors
  129.           MOV     DI,OFFSET INFO11[31]
  130.           CALL    DEC5OUT
  131.           CALL    STRIP0
  132.           MOV     AX,DATASEC                    ; Convert Total Data Clusters
  133.           XOR     DX,DX
  134.           MOV     BL,CLSTSEC
  135.           XOR     BH,BH
  136.           DIV     BX
  137.           MOV     DI,OFFSET INFO12[31]
  138.           CALL    DEC5OUT
  139.           CALL    STRIP0
  140.           CMP     AX,4079                       ; Convert FAT Entry Size
  141.           MOV     AX,12
  142.           JLE     FATOK
  143.           MOV     AX,16
  144. FATOK:    MOV     DI,OFFSET INFO14[29]
  145.           CALL    DEC2OUT
  146.           MOV     AX,DATASEC                    ; Convert Total Data Bytes
  147.           MOV     BX,SECSIZE
  148.           MUL     BX
  149.           MOV     DI,OFFSET INFO10[31]
  150.           CALL    DEC8OUT
  151.           CALL    STRIP0
  152.           MOV     AL,FATCNT                     ; Convert Number of FAT's
  153.           ADD     AL,'0'
  154.           MOV     INFO13[21],AL
  155.           MOV     AX,FATSEC                     ; Convert FAT Sectors
  156.           MOV     DI,OFFSET INFO14[6]
  157.           CALL    DEC2OUT
  158.           CALL    STRIP0
  159.           MOV     AX,DIRCNT                     ; Convert DIR Entries
  160.           MOV     DI,OFFSET INFO16[17]
  161.           CALL    DEC4OUT
  162.           CALL    STRIP0
  163.           MOV     AH,9                          ; Output to Screen
  164.           MOV     DX,OFFSET INFO
  165.           INT     21H
  166.           MOV     AX,4C00H                      ; Exit to DOS
  167.           INT     21H
  168.  
  169. STRIP0:   CMP     BYTE PTR [DI],'0'             ; If Char != '0', Done
  170.           JNE     STRIP1
  171.           CMP     BYTE PTR [DI+1],'0'           ; If Next Char != Numeric, Done
  172.           JL      STRIP1
  173.           CMP     BYTE PTR [DI+1],'9'
  174.           JG      STRIP1
  175.           MOV     BYTE PTR [DI],' '             ; Change Char to Space
  176.           INC     DI
  177.           JMP     SHORT STRIP0                  ; Repeat
  178. STRIP1:   RET                                   ; Done
  179.  
  180.  
  181. DEC2OUT:  PUSH    AX                            ; Save Registers
  182.           PUSH    BX
  183.           XOR     AH,AH                         ; Clear AH
  184.           MOV     BL,10                         ; AH=AX%10,AL=AX/10
  185.           DIV     BL
  186.           ADD     AX,'00'                       ; Convert to ASCII
  187.           SUB     DI,2
  188.           MOV     [DI],AX                       ; Store in String
  189.           POP     BX                            ; Restore Registers
  190.           POP     AX
  191.           RET                                   ; Done
  192.  
  193. DEC4OUT:  PUSH    AX                            ; Save Registers
  194.           PUSH    BX
  195.           MOV     BL,100                        ; AH=AX%100,AL=AX/100
  196.           DIV     BL
  197.           XCHG    AH,AL                         ; Convert 2 LSD's
  198.           CALL    DEC2OUT
  199.           XCHG    AH,AL                         ; Convert 2 MSD's
  200.           CALL    DEC2OUT
  201.           POP     BX                            ; Restore Registers
  202.           POP     AX
  203.           RET                                   ; Done
  204.  
  205. DEC5OUT:  PUSH    AX                            ; Save Registers
  206.           PUSH    BX
  207.           PUSH    DX
  208.           XOR     DX,DX                         ; MSW = 0
  209.           MOV     BX,10000                      ; DX=AX%10000,AX=AX/10000
  210.           DIV     BX
  211.           XCHG    AX,DX
  212.           CALL    DEC4OUT                       ; Convert 4 LSD's
  213.           MOV     AL,DL                         ; Convert MSD to ASCII
  214.